#ifndef    __LCM_H
#define    __LCM_H

#include "stm32f1xx_hal.h"
#include "stm32f1xx_hal_gpio.h"
#include "lcd_fonts.h"

/*------------------------------  引脚配置宏 ----------------------------------*/

#define        LCD_RST_PIN      GPIO_PIN_0
#define        LCD_RST_PORT     GPIOA
#define        LCD_DC_PIN       GPIO_PIN_1
#define        LCD_DC_PORT      GPIOA
#define        LCD_SCK_PIN      GPIO_PIN_2
#define        LCD_SCK_PORT     GPIOA
#define        LCD_SDA_PIN      GPIO_PIN_3
#define        LCD_SDA_PORT     GPIOA

/*------------------------------- 控制宏 ------------------------------------*/

#define        LCD_RST_H     HAL_GPIO_WritePin(LCD_RST_PORT,LCD_RST_PIN,1)
#define        LCD_RST_L     HAL_GPIO_WritePin(LCD_RST_PORT,LCD_RST_PIN,0)

#define        LCD_DC_H      HAL_GPIO_WritePin(LCD_DC_PORT,LCD_DC_PIN,1)
#define        LCD_DC_L      HAL_GPIO_WritePin(LCD_DC_PORT,LCD_DC_PIN,0)

#define        LCD_SCK_H     HAL_GPIO_WritePin(LCD_SCK_PORT,LCD_SCK_PIN,1)
#define        LCD_SCK_L     HAL_GPIO_WritePin(LCD_SCK_PORT,LCD_SCK_PIN,0)

#define        LCD_SDA_H     HAL_GPIO_WritePin(LCD_SDA_PORT,LCD_SDA_PIN,1)
#define        LCD_SDA_L     HAL_GPIO_WritePin(LCD_SDA_PORT,LCD_SDA_PIN,0)



/*------------------------------- 参数宏 ------------------------------------*/

#define    LCD_Contrast    32               // 微调屏幕对比度，可设置范围0x00～0x3f，用户需要根据自己的屏幕进行微调，以达到最佳的显示效果
#define    Fill_Zero        0               // 填充0
#define    Fill_Space        1              // 填充空格

#define    Cursor_Reverse    1              //	反白光标
#define    Cursor_Underline  2              // 下划线光标

#define    ON   1                           // 开启
#define    OFF  0                           // 关闭

/*------------------------------- 函数列表 ------------------------------------*/

void LCD_Init(void);            //	初始化LCD屏幕，进行升压、对比度的配置
void LCD_Clear(void);           //	清除屏幕

void LCD_SetFont(pFONT *fonts);                 // 设置要显示的字体
void LCD_SetReverse(uint8_t mode);              //	开启反白，接下来显示的内容全部以反白的模式显示
void LCD_SetCursor(uint8_t n, uint8_t mode);    // 设置光标要显示的位置以及光标的模式
void LCD_ShowNumMode(uint8_t mode);             // 设置数字高位为0时的显示方式

void LCD_DisplayString(uint8_t x, uint8_t y, uint8_t *p);                       // 在指定坐标处显示ASCII字符串
void LCD_DisplayNumber(uint8_t x, uint8_t y, uint32_t number, uint8_t len);     // 在指定坐标处显示数字变量，取值范围 0~4294967295
void LCD_DisplayText(uint8_t x, uint8_t y, uint8_t *pText);                     // 在指定坐标处显示文本，可显示汉字或ASCII码
void LCD_DrawImage(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *pImage); // 在指定坐标处显示图片

void LCD_GPIO_Config(void);                                             // 初始化LCD的GPIO口,推挽输出
void LCD_Address(uint8_t x, uint8_t y);                                 // 设置需要显示数据的坐标
void LCD_DisplayChar(uint8_t x, uint8_t y, uint8_t ASCII);              //	在指定坐标处显示单个ASCII码
void LCD_DisplayChinese(uint8_t x, uint8_t y, uint8_t *pText);          // 在指定坐标处显示单个汉字
void WriteCom_7565(uint8_t com);                //写命令
void WriteData_7565(uint8_t dat);               //写数据

#endif 
